author | jlahoda |
Wed, 20 Feb 2019 11:11:38 +0100 | |
changeset 53840 | 9a0fd1f82406 |
parent 52938 | 5ff7480c9e28 |
permissions | -rw-r--r-- |
52938 | 1 |
/* |
2 |
* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. |
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
4 |
* |
|
5 |
* This code is free software; you can redistribute it and/or modify it |
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
|
7 |
* published by the Free Software Foundation. Oracle designates this |
|
8 |
* particular file as subject to the "Classpath" exception as provided |
|
9 |
* by Oracle in the LICENSE file that accompanied this code. |
|
10 |
* |
|
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
|
15 |
* accompanied this code). |
|
16 |
* |
|
17 |
* You should have received a copy of the GNU General Public License version |
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
20 |
* |
|
21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
22 |
* or visit www.oracle.com if you need additional information or have any |
|
23 |
* questions. |
|
24 |
*/ |
|
25 |
||
26 |
#include "jni.h" |
|
27 |
#include "jni_util.h" |
|
28 |
#include "jvm.h" |
|
29 |
#include "jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl.h" |
|
30 |
||
31 |
#include <stdlib.h> |
|
32 |
#include <wincon.h> |
|
33 |
#include <winuser.h> |
|
34 |
||
35 |
static jclass pointerClass; |
|
36 |
static jmethodID pointerConstructor; |
|
37 |
static jfieldID pointerValue; |
|
38 |
||
39 |
static jclass intByReferenceClass; |
|
40 |
static jfieldID intByReferenceValue; |
|
41 |
||
42 |
static jclass lastErrorExceptionClass; |
|
43 |
static jmethodID lastErrorExceptionConstructor; |
|
44 |
||
45 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CHAR_INFO |
|
46 |
static jclass CHAR_INFO_Class; |
|
47 |
static jmethodID CHAR_INFO_Constructor; |
|
48 |
static jfieldID CHAR_INFO_uChar; |
|
49 |
static jfieldID CHAR_INFO_Attributes; |
|
50 |
||
51 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CONSOLE_CURSOR_INFO |
|
52 |
static jclass CONSOLE_CURSOR_INFO_Class; |
|
53 |
static jmethodID CONSOLE_CURSOR_INFO_Constructor; |
|
54 |
static jfieldID CONSOLE_CURSOR_INFO_dwSize; |
|
55 |
static jfieldID CONSOLE_CURSOR_INFO_bVisible; |
|
56 |
||
57 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CONSOLE_SCREEN_BUFFER_INFO |
|
58 |
static jclass CONSOLE_SCREEN_BUFFER_INFO_Class; |
|
59 |
static jmethodID CONSOLE_SCREEN_BUFFER_INFO_Constructor; |
|
60 |
static jfieldID CONSOLE_SCREEN_BUFFER_INFO_dwSize; |
|
61 |
static jfieldID CONSOLE_SCREEN_BUFFER_INFO_dwCursorPosition; |
|
62 |
static jfieldID CONSOLE_SCREEN_BUFFER_INFO_wAttributes; |
|
63 |
static jfieldID CONSOLE_SCREEN_BUFFER_INFO_srWindow; |
|
64 |
static jfieldID CONSOLE_SCREEN_BUFFER_INFO_dwMaximumWindowSize; |
|
65 |
||
66 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.COORD |
|
67 |
static jclass COORD_Class; |
|
68 |
static jmethodID COORD_Constructor; |
|
69 |
static jfieldID COORD_X; |
|
70 |
static jfieldID COORD_Y; |
|
71 |
||
72 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.INPUT_RECORD |
|
73 |
static jclass INPUT_RECORD_Class; |
|
74 |
static jmethodID INPUT_RECORD_Constructor; |
|
75 |
static jfieldID INPUT_RECORD_EventType; |
|
76 |
static jfieldID INPUT_RECORD_Event; |
|
77 |
||
78 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.INPUT_RECORD.EventUnion |
|
79 |
static jclass EventUnion_Class; |
|
80 |
static jmethodID EventUnion_Constructor; |
|
81 |
static jfieldID EventUnion_KeyEvent; |
|
82 |
static jfieldID EventUnion_MouseEvent; |
|
83 |
static jfieldID EventUnion_WindowBufferSizeEvent; |
|
84 |
static jfieldID EventUnion_MenuEvent; |
|
85 |
static jfieldID EventUnion_FocusEvent; |
|
86 |
||
87 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.KEY_EVENT_RECORD |
|
88 |
static jclass KEY_EVENT_RECORD_Class; |
|
89 |
static jmethodID KEY_EVENT_RECORD_Constructor; |
|
90 |
static jfieldID KEY_EVENT_RECORD_bKeyDown; |
|
91 |
static jfieldID KEY_EVENT_RECORD_wRepeatCount; |
|
92 |
static jfieldID KEY_EVENT_RECORD_wVirtualKeyCode; |
|
93 |
static jfieldID KEY_EVENT_RECORD_wVirtualScanCode; |
|
94 |
static jfieldID KEY_EVENT_RECORD_uChar; |
|
95 |
static jfieldID KEY_EVENT_RECORD_dwControlKeyState; |
|
96 |
||
97 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.MOUSE_EVENT_RECORD |
|
98 |
static jclass MOUSE_EVENT_RECORD_Class; |
|
99 |
static jmethodID MOUSE_EVENT_RECORD_Constructor; |
|
100 |
static jfieldID MOUSE_EVENT_RECORD_dwMousePosition; |
|
101 |
static jfieldID MOUSE_EVENT_RECORD_dwButtonState; |
|
102 |
static jfieldID MOUSE_EVENT_RECORD_dwControlKeyState; |
|
103 |
static jfieldID MOUSE_EVENT_RECORD_dwEventFlags; |
|
104 |
||
105 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.WINDOW_BUFFER_SIZE_RECORD |
|
106 |
static jclass WINDOW_BUFFER_SIZE_RECORD_Class; |
|
107 |
static jmethodID WINDOW_BUFFER_SIZE_RECORD_Constructor; |
|
108 |
static jfieldID WINDOW_BUFFER_SIZE_RECORD_dwSize; |
|
109 |
||
110 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.MENU_EVENT_RECORD |
|
111 |
static jclass MENU_EVENT_RECORD_Class; |
|
112 |
static jmethodID MENU_EVENT_RECORD_Constructor; |
|
113 |
static jfieldID MENU_EVENT_RECORD_dwCommandId; |
|
114 |
||
115 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.FOCUS_EVENT_RECORD |
|
116 |
static jclass FOCUS_EVENT_RECORD_Class; |
|
117 |
static jmethodID FOCUS_EVENT_RECORD_Constructor; |
|
118 |
static jfieldID FOCUS_EVENT_RECORD_bSetFocus; |
|
119 |
||
120 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.SMALL_RECT |
|
121 |
static jclass SMALL_RECT_Class; |
|
122 |
static jmethodID SMALL_RECT_Constructor; |
|
123 |
static jfieldID SMALL_RECT_Left; |
|
124 |
static jfieldID SMALL_RECT_Top; |
|
125 |
static jfieldID SMALL_RECT_Right; |
|
126 |
static jfieldID SMALL_RECT_Bottom; |
|
127 |
||
128 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.UnionChar |
|
129 |
static jclass UnionChar_Class; |
|
130 |
static jmethodID UnionChar_Constructor; |
|
131 |
static jfieldID UnionChar_UnicodeChar; |
|
132 |
||
133 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_initIDs |
|
134 |
(JNIEnv *env, jclass) { |
|
135 |
jclass cls; |
|
136 |
cls = env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Pointer"); |
|
137 |
CHECK_NULL(cls); |
|
138 |
pointerClass = (jclass) env->NewGlobalRef(cls); |
|
139 |
pointerConstructor = env->GetMethodID(cls, "<init>", "(J)V"); |
|
140 |
CHECK_NULL(pointerConstructor); |
|
141 |
pointerValue = env->GetFieldID(cls, "value", "J"); |
|
142 |
CHECK_NULL(pointerValue); |
|
143 |
||
144 |
cls = env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/LastErrorException"); |
|
145 |
CHECK_NULL(cls); |
|
146 |
lastErrorExceptionClass = (jclass) env->NewGlobalRef(cls); |
|
147 |
lastErrorExceptionConstructor = env->GetMethodID(cls, "<init>", "(J)V"); |
|
148 |
CHECK_NULL(lastErrorExceptionConstructor); |
|
149 |
||
150 |
cls = env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/IntByReference"); |
|
151 |
CHECK_NULL(cls); |
|
152 |
intByReferenceClass = (jclass) env->NewGlobalRef(cls); |
|
153 |
intByReferenceValue = env->GetFieldID(cls, "value", "I"); |
|
154 |
CHECK_NULL(intByReferenceValue); |
|
155 |
||
156 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CHAR_INFO |
|
157 |
CHAR_INFO_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$CHAR_INFO")); |
|
158 |
CHECK_NULL(CHAR_INFO_Class); |
|
159 |
CHAR_INFO_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
160 |
CHECK_NULL(CHAR_INFO_Constructor); |
|
161 |
CHAR_INFO_uChar = env->GetFieldID(CHAR_INFO_Class, "uChar", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$UnionChar;"); |
|
162 |
CHECK_NULL(CHAR_INFO_uChar); |
|
163 |
CHAR_INFO_Attributes = env->GetFieldID(CHAR_INFO_Class, "Attributes", "S"); |
|
164 |
CHECK_NULL(CHAR_INFO_Attributes); |
|
165 |
||
166 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CONSOLE_CURSOR_INFO |
|
167 |
CONSOLE_CURSOR_INFO_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$CONSOLE_CURSOR_INFO")); |
|
168 |
CHECK_NULL(CONSOLE_CURSOR_INFO_Class); |
|
169 |
CONSOLE_CURSOR_INFO_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
170 |
CHECK_NULL(CONSOLE_CURSOR_INFO_Constructor); |
|
171 |
CONSOLE_CURSOR_INFO_dwSize = env->GetFieldID(CONSOLE_CURSOR_INFO_Class, "dwSize", "I"); |
|
172 |
CHECK_NULL(CONSOLE_CURSOR_INFO_dwSize); |
|
173 |
CONSOLE_CURSOR_INFO_bVisible = env->GetFieldID(CONSOLE_CURSOR_INFO_Class, "bVisible", "Z"); |
|
174 |
CHECK_NULL(CONSOLE_CURSOR_INFO_bVisible); |
|
175 |
||
176 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CONSOLE_SCREEN_BUFFER_INFO |
|
177 |
CONSOLE_SCREEN_BUFFER_INFO_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$CONSOLE_SCREEN_BUFFER_INFO")); |
|
178 |
CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_Class); |
|
179 |
CONSOLE_SCREEN_BUFFER_INFO_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
180 |
CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_Constructor); |
|
181 |
CONSOLE_SCREEN_BUFFER_INFO_dwSize = env->GetFieldID(CONSOLE_SCREEN_BUFFER_INFO_Class, "dwSize", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD;"); |
|
182 |
CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_dwSize); |
|
183 |
CONSOLE_SCREEN_BUFFER_INFO_dwCursorPosition = env->GetFieldID(CONSOLE_SCREEN_BUFFER_INFO_Class, "dwCursorPosition", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD;"); |
|
184 |
CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_dwCursorPosition); |
|
185 |
CONSOLE_SCREEN_BUFFER_INFO_wAttributes = env->GetFieldID(CONSOLE_SCREEN_BUFFER_INFO_Class, "wAttributes", "S"); |
|
186 |
CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_wAttributes); |
|
187 |
CONSOLE_SCREEN_BUFFER_INFO_srWindow = env->GetFieldID(CONSOLE_SCREEN_BUFFER_INFO_Class, "srWindow", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$SMALL_RECT;"); |
|
188 |
CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_srWindow); |
|
189 |
CONSOLE_SCREEN_BUFFER_INFO_dwMaximumWindowSize = env->GetFieldID(CONSOLE_SCREEN_BUFFER_INFO_Class, "dwMaximumWindowSize", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD;"); |
|
190 |
CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_dwMaximumWindowSize); |
|
191 |
||
192 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.COORD |
|
193 |
COORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD")); |
|
194 |
CHECK_NULL(COORD_Class); |
|
195 |
COORD_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
196 |
CHECK_NULL(COORD_Constructor); |
|
197 |
COORD_X = env->GetFieldID(COORD_Class, "X", "S"); |
|
198 |
CHECK_NULL(COORD_X); |
|
199 |
COORD_Y = env->GetFieldID(COORD_Class, "Y", "S"); |
|
200 |
CHECK_NULL(COORD_Y); |
|
201 |
||
202 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.INPUT_RECORD |
|
203 |
INPUT_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$INPUT_RECORD")); |
|
204 |
CHECK_NULL(INPUT_RECORD_Class); |
|
205 |
INPUT_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
206 |
CHECK_NULL(INPUT_RECORD_Constructor); |
|
207 |
INPUT_RECORD_EventType = env->GetFieldID(INPUT_RECORD_Class, "EventType", "S"); |
|
208 |
CHECK_NULL(INPUT_RECORD_EventType); |
|
209 |
INPUT_RECORD_Event = env->GetFieldID(INPUT_RECORD_Class, "Event", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$INPUT_RECORD$EventUnion;"); |
|
210 |
CHECK_NULL(INPUT_RECORD_Event); |
|
211 |
||
212 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.INPUT_RECORD.EventUnion |
|
213 |
EventUnion_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$INPUT_RECORD$EventUnion")); |
|
214 |
CHECK_NULL(EventUnion_Class); |
|
215 |
EventUnion_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
216 |
CHECK_NULL(EventUnion_Constructor); |
|
217 |
EventUnion_KeyEvent = env->GetFieldID(EventUnion_Class, "KeyEvent", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$KEY_EVENT_RECORD;"); |
|
218 |
CHECK_NULL(EventUnion_KeyEvent); |
|
219 |
EventUnion_MouseEvent = env->GetFieldID(EventUnion_Class, "MouseEvent", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$MOUSE_EVENT_RECORD;"); |
|
220 |
CHECK_NULL(EventUnion_MouseEvent); |
|
221 |
EventUnion_WindowBufferSizeEvent = env->GetFieldID(EventUnion_Class, "WindowBufferSizeEvent", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$WINDOW_BUFFER_SIZE_RECORD;"); |
|
222 |
CHECK_NULL(EventUnion_WindowBufferSizeEvent); |
|
223 |
EventUnion_MenuEvent = env->GetFieldID(EventUnion_Class, "MenuEvent", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$MENU_EVENT_RECORD;"); |
|
224 |
CHECK_NULL(EventUnion_MenuEvent); |
|
225 |
EventUnion_FocusEvent = env->GetFieldID(EventUnion_Class, "FocusEvent", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$FOCUS_EVENT_RECORD;"); |
|
226 |
CHECK_NULL(EventUnion_FocusEvent); |
|
227 |
||
228 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.KEY_EVENT_RECORD |
|
229 |
KEY_EVENT_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$KEY_EVENT_RECORD")); |
|
230 |
CHECK_NULL(KEY_EVENT_RECORD_Class); |
|
231 |
KEY_EVENT_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
232 |
CHECK_NULL(KEY_EVENT_RECORD_Constructor); |
|
233 |
KEY_EVENT_RECORD_bKeyDown = env->GetFieldID(KEY_EVENT_RECORD_Class, "bKeyDown", "Z"); |
|
234 |
CHECK_NULL(KEY_EVENT_RECORD_bKeyDown); |
|
235 |
KEY_EVENT_RECORD_wRepeatCount = env->GetFieldID(KEY_EVENT_RECORD_Class, "wRepeatCount", "S"); |
|
236 |
CHECK_NULL(KEY_EVENT_RECORD_wRepeatCount); |
|
237 |
KEY_EVENT_RECORD_wVirtualKeyCode = env->GetFieldID(KEY_EVENT_RECORD_Class, "wVirtualKeyCode", "S"); |
|
238 |
CHECK_NULL(KEY_EVENT_RECORD_wVirtualKeyCode); |
|
239 |
KEY_EVENT_RECORD_wVirtualScanCode = env->GetFieldID(KEY_EVENT_RECORD_Class, "wVirtualScanCode", "S"); |
|
240 |
CHECK_NULL(KEY_EVENT_RECORD_wVirtualScanCode); |
|
241 |
KEY_EVENT_RECORD_uChar = env->GetFieldID(KEY_EVENT_RECORD_Class, "uChar", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$UnionChar;"); |
|
242 |
CHECK_NULL(KEY_EVENT_RECORD_uChar); |
|
243 |
KEY_EVENT_RECORD_dwControlKeyState = env->GetFieldID(KEY_EVENT_RECORD_Class, "dwControlKeyState", "I"); |
|
244 |
CHECK_NULL(KEY_EVENT_RECORD_dwControlKeyState); |
|
245 |
||
246 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.MOUSE_EVENT_RECORD |
|
247 |
MOUSE_EVENT_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$MOUSE_EVENT_RECORD")); |
|
248 |
CHECK_NULL(MOUSE_EVENT_RECORD_Class); |
|
249 |
MOUSE_EVENT_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
250 |
CHECK_NULL(MOUSE_EVENT_RECORD_Constructor); |
|
251 |
MOUSE_EVENT_RECORD_dwMousePosition = env->GetFieldID(MOUSE_EVENT_RECORD_Class, "dwMousePosition", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD;"); |
|
252 |
CHECK_NULL(MOUSE_EVENT_RECORD_dwMousePosition); |
|
253 |
MOUSE_EVENT_RECORD_dwButtonState = env->GetFieldID(MOUSE_EVENT_RECORD_Class, "dwButtonState", "I"); |
|
254 |
CHECK_NULL(MOUSE_EVENT_RECORD_dwButtonState); |
|
255 |
MOUSE_EVENT_RECORD_dwControlKeyState = env->GetFieldID(MOUSE_EVENT_RECORD_Class, "dwControlKeyState", "I"); |
|
256 |
CHECK_NULL(MOUSE_EVENT_RECORD_dwControlKeyState); |
|
257 |
MOUSE_EVENT_RECORD_dwEventFlags = env->GetFieldID(MOUSE_EVENT_RECORD_Class, "dwEventFlags", "I"); |
|
258 |
CHECK_NULL(MOUSE_EVENT_RECORD_dwEventFlags); |
|
259 |
||
260 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.WINDOW_BUFFER_SIZE_RECORD |
|
261 |
WINDOW_BUFFER_SIZE_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$WINDOW_BUFFER_SIZE_RECORD")); |
|
262 |
CHECK_NULL(WINDOW_BUFFER_SIZE_RECORD_Class); |
|
263 |
WINDOW_BUFFER_SIZE_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
264 |
CHECK_NULL(WINDOW_BUFFER_SIZE_RECORD_Constructor); |
|
265 |
WINDOW_BUFFER_SIZE_RECORD_dwSize = env->GetFieldID(WINDOW_BUFFER_SIZE_RECORD_Class, "dwSize", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD;"); |
|
266 |
CHECK_NULL(WINDOW_BUFFER_SIZE_RECORD_dwSize); |
|
267 |
||
268 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.MENU_EVENT_RECORD |
|
269 |
MENU_EVENT_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$MENU_EVENT_RECORD")); |
|
270 |
CHECK_NULL(MENU_EVENT_RECORD_Class); |
|
271 |
MENU_EVENT_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
272 |
CHECK_NULL(MENU_EVENT_RECORD_Constructor); |
|
273 |
MENU_EVENT_RECORD_dwCommandId = env->GetFieldID(MENU_EVENT_RECORD_Class, "dwCommandId", "I"); |
|
274 |
CHECK_NULL(MENU_EVENT_RECORD_dwCommandId); |
|
275 |
||
276 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.FOCUS_EVENT_RECORD |
|
277 |
FOCUS_EVENT_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$FOCUS_EVENT_RECORD")); |
|
278 |
CHECK_NULL(FOCUS_EVENT_RECORD_Class); |
|
279 |
FOCUS_EVENT_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
280 |
CHECK_NULL(FOCUS_EVENT_RECORD_Constructor); |
|
281 |
FOCUS_EVENT_RECORD_bSetFocus = env->GetFieldID(FOCUS_EVENT_RECORD_Class, "bSetFocus", "Z"); |
|
282 |
CHECK_NULL(FOCUS_EVENT_RECORD_bSetFocus); |
|
283 |
||
284 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.SMALL_RECT |
|
285 |
SMALL_RECT_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$SMALL_RECT")); |
|
286 |
CHECK_NULL(SMALL_RECT_Class); |
|
287 |
SMALL_RECT_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
288 |
CHECK_NULL(SMALL_RECT_Constructor); |
|
289 |
SMALL_RECT_Left = env->GetFieldID(SMALL_RECT_Class, "Left", "S"); |
|
290 |
CHECK_NULL(SMALL_RECT_Left); |
|
291 |
SMALL_RECT_Top = env->GetFieldID(SMALL_RECT_Class, "Top", "S"); |
|
292 |
CHECK_NULL(SMALL_RECT_Top); |
|
293 |
SMALL_RECT_Right = env->GetFieldID(SMALL_RECT_Class, "Right", "S"); |
|
294 |
CHECK_NULL(SMALL_RECT_Right); |
|
295 |
SMALL_RECT_Bottom = env->GetFieldID(SMALL_RECT_Class, "Bottom", "S"); |
|
296 |
CHECK_NULL(SMALL_RECT_Bottom); |
|
297 |
||
298 |
//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.UnionChar |
|
299 |
UnionChar_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$UnionChar")); |
|
300 |
CHECK_NULL(UnionChar_Class); |
|
301 |
UnionChar_Constructor = env->GetMethodID(cls, "<init>", "()V"); |
|
302 |
CHECK_NULL(UnionChar_Constructor); |
|
303 |
UnionChar_UnicodeChar = env->GetFieldID(UnionChar_Class, "UnicodeChar", "C"); |
|
304 |
CHECK_NULL(UnionChar_UnicodeChar); |
|
305 |
} |
|
306 |
||
307 |
/* |
|
308 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
309 |
* Method: WaitForSingleObject |
|
310 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;I)I |
|
311 |
*/ |
|
312 |
JNIEXPORT jint JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_WaitForSingleObject |
|
313 |
(JNIEnv *env, jobject kernel, jobject in_hHandle, jint in_dwMilliseconds) { |
|
314 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hHandle, pointerValue)); |
|
315 |
return WaitForSingleObject(h, in_dwMilliseconds); |
|
316 |
} |
|
317 |
||
318 |
/* |
|
319 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
320 |
* Method: GetStdHandle |
|
321 |
* Signature: (I)Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer; |
|
322 |
*/ |
|
323 |
JNIEXPORT jobject JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_GetStdHandle |
|
324 |
(JNIEnv *env, jobject, jint nStdHandle) { |
|
325 |
return env->NewObject(pointerClass, |
|
326 |
pointerConstructor, |
|
327 |
nStdHandle); |
|
328 |
} |
|
329 |
||
330 |
/* |
|
331 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
332 |
* Method: GetConsoleOutputCP |
|
333 |
* Signature: ()I |
|
334 |
*/ |
|
335 |
JNIEXPORT jint JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_GetConsoleOutputCP |
|
336 |
(JNIEnv *, jobject) { |
|
337 |
return GetConsoleOutputCP(); |
|
338 |
} |
|
339 |
||
340 |
/* |
|
341 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
342 |
* Method: FillConsoleOutputCharacter |
|
343 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;CILjdk/internal/org/jline/terminal/impl/jna/win/Kernel32/COORD;Ljdk/internal/org/jline/terminal/impl/jna/win/IntByReference;)V |
|
344 |
*/ |
|
345 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_FillConsoleOutputCharacter |
|
346 |
(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jchar in_cCharacter, jint in_nLength, jobject in_dwWriteCoord, jobject out_lpNumberOfCharsWritten) { |
|
347 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue)); |
|
348 |
DWORD written; |
|
349 |
COORD coord; |
|
350 |
coord.X = (SHORT) env->GetLongField(in_dwWriteCoord, COORD_X); |
|
351 |
coord.Y = (SHORT) env->GetLongField(in_dwWriteCoord, COORD_Y); |
|
352 |
if (!FillConsoleOutputCharacter(h, (CHAR) in_cCharacter, in_nLength, coord, &written)) { |
|
353 |
DWORD error = GetLastError(); |
|
354 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
355 |
lastErrorExceptionConstructor, |
|
356 |
(jlong) error); |
|
357 |
env->Throw((jthrowable) exc); |
|
358 |
return ; |
|
359 |
} |
|
360 |
env->SetIntField(out_lpNumberOfCharsWritten, intByReferenceValue, written); |
|
361 |
} |
|
362 |
||
363 |
/* |
|
364 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
365 |
* Method: FillConsoleOutputAttribute |
|
366 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;SILjdk/internal/org/jline/terminal/impl/jna/win/Kernel32/COORD;Ljdk/internal/org/jline/terminal/impl/jna/win/IntByReference;)V |
|
367 |
*/ |
|
368 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_FillConsoleOutputAttribute |
|
369 |
(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jshort in_wAttribute, jint in_nLength, jobject in_dwWriteCoord, jobject out_lpNumberOfAttrsWritten) { |
|
370 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue)); |
|
371 |
DWORD written; |
|
372 |
COORD coord; |
|
373 |
coord.X = (SHORT) env->GetLongField(in_dwWriteCoord, COORD_X); |
|
374 |
coord.Y = (SHORT) env->GetLongField(in_dwWriteCoord, COORD_Y); |
|
375 |
if (!FillConsoleOutputAttribute(h, in_wAttribute, in_nLength, coord, &written)) { |
|
376 |
DWORD error = GetLastError(); |
|
377 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
378 |
lastErrorExceptionConstructor, |
|
379 |
(jlong) error); |
|
380 |
env->Throw((jthrowable) exc); |
|
381 |
return ; |
|
382 |
} |
|
383 |
env->SetIntField(out_lpNumberOfAttrsWritten, intByReferenceValue, written); |
|
384 |
} |
|
385 |
||
386 |
/* |
|
387 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
388 |
* Method: GetConsoleMode |
|
389 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;Ljdk/internal/org/jline/terminal/impl/jna/win/IntByReference;)V |
|
390 |
*/ |
|
391 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_GetConsoleMode |
|
392 |
(JNIEnv *env, jobject, jobject in_hConsoleOutput, jobject out_lpMode) { |
|
393 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue)); |
|
394 |
DWORD mode; |
|
395 |
if (!GetConsoleMode(h, &mode)) { |
|
396 |
DWORD error = GetLastError(); |
|
397 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
398 |
lastErrorExceptionConstructor, |
|
399 |
(jlong) error); |
|
400 |
env->Throw((jthrowable) exc); |
|
401 |
return ; |
|
402 |
} |
|
403 |
env->SetIntField(out_lpMode, intByReferenceValue, mode); |
|
404 |
} |
|
405 |
||
406 |
/* |
|
407 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
408 |
* Method: GetConsoleScreenBufferInfo |
|
409 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/CONSOLE_SCREEN_BUFFER_INFO;)V |
|
410 |
*/ |
|
411 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_GetConsoleScreenBufferInfo |
|
412 |
(JNIEnv *env, jobject, jobject in_hConsoleOutput, jobject/*CONSOLE_SCREEN_BUFFER_INFO*/ out_lpConsoleScreenBufferInfo) { |
|
413 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue)); |
|
414 |
CONSOLE_SCREEN_BUFFER_INFO buffer; |
|
415 |
if (!GetConsoleScreenBufferInfo(h, &buffer)) { |
|
416 |
DWORD error = GetLastError(); |
|
417 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
418 |
lastErrorExceptionConstructor, |
|
419 |
(jlong) error); |
|
420 |
env->Throw((jthrowable) exc); |
|
421 |
return ; |
|
422 |
} |
|
423 |
||
424 |
jobject dwSize = env->NewObject(COORD_Class, |
|
425 |
COORD_Constructor); |
|
426 |
env->SetIntField(dwSize, COORD_X, buffer.dwSize.X); |
|
427 |
env->SetIntField(dwSize, COORD_Y, buffer.dwSize.Y); |
|
428 |
env->SetObjectField(out_lpConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO_dwSize, dwSize); |
|
429 |
||
430 |
jobject dwCursorPosition = env->NewObject(COORD_Class, |
|
431 |
COORD_Constructor); |
|
432 |
env->SetIntField(dwCursorPosition, COORD_X, buffer.dwCursorPosition.X); |
|
433 |
env->SetIntField(dwCursorPosition, COORD_Y, buffer.dwCursorPosition.Y); |
|
434 |
env->SetObjectField(out_lpConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO_dwCursorPosition, dwCursorPosition); |
|
435 |
||
436 |
env->SetIntField(out_lpConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO_wAttributes, buffer.wAttributes); |
|
437 |
||
438 |
jobject srWindow = env->NewObject(SMALL_RECT_Class, |
|
439 |
SMALL_RECT_Constructor); |
|
440 |
env->SetIntField(srWindow, SMALL_RECT_Left, buffer.srWindow.Left); |
|
441 |
env->SetIntField(srWindow, SMALL_RECT_Top, buffer.srWindow.Top); |
|
442 |
env->SetIntField(srWindow, SMALL_RECT_Right, buffer.srWindow.Right); |
|
443 |
env->SetIntField(srWindow, SMALL_RECT_Bottom, buffer.srWindow.Bottom); |
|
444 |
env->SetObjectField(out_lpConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO_srWindow, srWindow); |
|
445 |
||
446 |
jobject dwMaximumWindowSize = env->NewObject(COORD_Class, |
|
447 |
COORD_Constructor); |
|
448 |
env->SetIntField(dwMaximumWindowSize, COORD_X, buffer.dwMaximumWindowSize.X); |
|
449 |
env->SetIntField(dwMaximumWindowSize, COORD_Y, buffer.dwMaximumWindowSize.Y); |
|
450 |
env->SetObjectField(out_lpConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO_dwMaximumWindowSize, dwMaximumWindowSize); |
|
451 |
} |
|
452 |
||
453 |
/* |
|
454 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
455 |
* Method: ReadConsoleInput |
|
456 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;[Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/INPUT_RECORD;ILjdk/internal/org/jline/terminal/impl/jna/win/IntByReference;)V |
|
457 |
*/ |
|
458 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_ReadConsoleInput |
|
459 |
(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jobjectArray/*INPUT_RECORD[]*/ out_lpBuffer, jint in_nLength, jobject out_lpNumberOfEventsRead) { |
|
460 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue)); |
|
461 |
INPUT_RECORD *buffer = new INPUT_RECORD[in_nLength]; |
|
462 |
DWORD numberOfEventsRead; |
|
53840
9a0fd1f82406
8218287: jshell tool: input behavior unstable after 12-ea+24 on Windows
jlahoda
parents:
52938
diff
changeset
|
463 |
if (!ReadConsoleInputW(h, buffer, in_nLength, &numberOfEventsRead)) { |
52938 | 464 |
delete buffer; |
465 |
DWORD error = GetLastError(); |
|
466 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
467 |
lastErrorExceptionConstructor, |
|
468 |
(jlong) error); |
|
469 |
env->Throw((jthrowable) exc); |
|
470 |
return ; |
|
471 |
} |
|
472 |
for (unsigned int i = 0; i < numberOfEventsRead; i++) { |
|
473 |
jobject record = env->NewObject(INPUT_RECORD_Class, |
|
474 |
INPUT_RECORD_Constructor); |
|
475 |
env->SetShortField(record, INPUT_RECORD_EventType, buffer[i].EventType); |
|
476 |
switch (buffer[i].EventType) { |
|
477 |
case KEY_EVENT: { |
|
478 |
jobject keyEvent = env->NewObject(KEY_EVENT_RECORD_Class, |
|
479 |
KEY_EVENT_RECORD_Constructor); |
|
480 |
env->SetBooleanField(keyEvent, KEY_EVENT_RECORD_bKeyDown, buffer[i].Event.KeyEvent.bKeyDown); |
|
481 |
env->SetShortField(keyEvent, KEY_EVENT_RECORD_wRepeatCount, buffer[i].Event.KeyEvent.wRepeatCount); |
|
482 |
env->SetShortField(keyEvent, KEY_EVENT_RECORD_wVirtualKeyCode, buffer[i].Event.KeyEvent.wVirtualKeyCode); |
|
483 |
env->SetShortField(keyEvent, KEY_EVENT_RECORD_wVirtualScanCode, buffer[i].Event.KeyEvent.wVirtualScanCode); |
|
484 |
||
485 |
jobject unionChar = env->NewObject(UnionChar_Class, |
|
486 |
UnionChar_Constructor); |
|
487 |
||
488 |
env->SetIntField(unionChar, UnionChar_UnicodeChar, buffer[i].Event.KeyEvent.uChar.UnicodeChar); |
|
489 |
||
490 |
env->SetObjectField(keyEvent, KEY_EVENT_RECORD_uChar, unionChar); |
|
491 |
||
492 |
env->SetIntField(keyEvent, KEY_EVENT_RECORD_dwControlKeyState, buffer[i].Event.KeyEvent.dwControlKeyState); |
|
493 |
||
494 |
jobject event = env->NewObject(EventUnion_Class, |
|
495 |
EventUnion_Constructor); |
|
496 |
||
497 |
env->SetObjectField(event, EventUnion_KeyEvent, keyEvent); |
|
498 |
env->SetObjectField(record, INPUT_RECORD_Event, event); |
|
499 |
break; |
|
500 |
} |
|
501 |
case MOUSE_EVENT: { |
|
502 |
jobject mouseEvent = env->NewObject(MOUSE_EVENT_RECORD_Class, |
|
503 |
MOUSE_EVENT_RECORD_Constructor); |
|
504 |
||
505 |
jobject dwMousePosition = env->NewObject(COORD_Class, |
|
506 |
COORD_Constructor); |
|
507 |
env->SetIntField(dwMousePosition, COORD_X, buffer[i].Event.MouseEvent.dwMousePosition.X); |
|
508 |
env->SetIntField(dwMousePosition, COORD_Y, buffer[i].Event.MouseEvent.dwMousePosition.Y); |
|
509 |
env->SetObjectField(mouseEvent, MOUSE_EVENT_RECORD_dwMousePosition, dwMousePosition); |
|
510 |
env->SetIntField(mouseEvent, MOUSE_EVENT_RECORD_dwButtonState, buffer[i].Event.MouseEvent.dwButtonState); |
|
511 |
env->SetIntField(mouseEvent, MOUSE_EVENT_RECORD_dwControlKeyState, buffer[i].Event.MouseEvent.dwControlKeyState); |
|
512 |
env->SetIntField(mouseEvent, MOUSE_EVENT_RECORD_dwEventFlags, buffer[i].Event.MouseEvent.dwEventFlags); |
|
513 |
||
514 |
jobject event = env->NewObject(EventUnion_Class, |
|
515 |
EventUnion_Constructor); |
|
516 |
||
517 |
env->SetObjectField(event, EventUnion_MouseEvent, mouseEvent); |
|
518 |
env->SetObjectField(record, INPUT_RECORD_Event, event); |
|
519 |
break; |
|
520 |
} |
|
521 |
case WINDOW_BUFFER_SIZE_EVENT: { |
|
522 |
jobject windowBufferSize = env->NewObject(WINDOW_BUFFER_SIZE_RECORD_Class, |
|
523 |
WINDOW_BUFFER_SIZE_RECORD_Constructor); |
|
524 |
||
525 |
jobject dwSize = env->NewObject(COORD_Class, |
|
526 |
COORD_Constructor); |
|
527 |
env->SetIntField(dwSize, COORD_X, buffer[i].Event.WindowBufferSizeEvent.dwSize.X); |
|
528 |
env->SetIntField(dwSize, COORD_Y, buffer[i].Event.WindowBufferSizeEvent.dwSize.Y); |
|
529 |
env->SetObjectField(windowBufferSize, WINDOW_BUFFER_SIZE_RECORD_dwSize, dwSize); |
|
530 |
||
531 |
jobject event = env->NewObject(EventUnion_Class, |
|
532 |
EventUnion_Constructor); |
|
533 |
||
534 |
env->SetObjectField(event, EventUnion_WindowBufferSizeEvent, windowBufferSize); |
|
535 |
env->SetObjectField(record, INPUT_RECORD_Event, event); |
|
536 |
break; |
|
537 |
} |
|
538 |
case MENU_EVENT: { |
|
539 |
jobject menuEvent = env->NewObject(MENU_EVENT_RECORD_Class, |
|
540 |
MENU_EVENT_RECORD_Constructor); |
|
541 |
||
542 |
env->SetBooleanField(menuEvent, MENU_EVENT_RECORD_dwCommandId, buffer[i].Event.MenuEvent.dwCommandId); |
|
543 |
||
544 |
jobject event = env->NewObject(EventUnion_Class, |
|
545 |
EventUnion_Constructor); |
|
546 |
||
547 |
env->SetObjectField(event, EventUnion_MenuEvent, menuEvent); |
|
548 |
env->SetObjectField(record, INPUT_RECORD_Event, event); |
|
549 |
break; |
|
550 |
} |
|
551 |
case FOCUS_EVENT: { |
|
552 |
jobject focusEvent = env->NewObject(FOCUS_EVENT_RECORD_Class, |
|
553 |
FOCUS_EVENT_RECORD_Constructor); |
|
554 |
||
555 |
env->SetIntField(focusEvent, FOCUS_EVENT_RECORD_bSetFocus, buffer[i].Event.FocusEvent.bSetFocus); |
|
556 |
||
557 |
jobject event = env->NewObject(EventUnion_Class, |
|
558 |
EventUnion_Constructor); |
|
559 |
||
560 |
env->SetObjectField(event, EventUnion_FocusEvent, focusEvent); |
|
561 |
env->SetObjectField(record, INPUT_RECORD_Event, event); |
|
562 |
break; |
|
563 |
} |
|
564 |
} |
|
565 |
env->SetObjectArrayElement(out_lpBuffer, i, record); |
|
566 |
} |
|
567 |
env->SetIntField(out_lpNumberOfEventsRead, intByReferenceValue, numberOfEventsRead); |
|
568 |
delete buffer; |
|
569 |
} |
|
570 |
||
571 |
/* |
|
572 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
573 |
* Method: SetConsoleCursorPosition |
|
574 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/COORD;)V |
|
575 |
*/ |
|
576 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_SetConsoleCursorPosition |
|
577 |
(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jobject in_dwCursorPosition) { |
|
578 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue)); |
|
579 |
COORD coord; |
|
580 |
coord.X = (SHORT) env->GetLongField(in_dwCursorPosition, COORD_X); |
|
581 |
coord.Y = (SHORT) env->GetLongField(in_dwCursorPosition, COORD_Y); |
|
582 |
if (!SetConsoleCursorPosition(h, coord)) { |
|
583 |
DWORD error = GetLastError(); |
|
584 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
585 |
lastErrorExceptionConstructor, |
|
586 |
(jlong) error); |
|
587 |
env->Throw((jthrowable) exc); |
|
588 |
return; |
|
589 |
} |
|
590 |
} |
|
591 |
||
592 |
/* |
|
593 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
594 |
* Method: SetConsoleMode |
|
595 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;I)V |
|
596 |
*/ |
|
597 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_SetConsoleMode |
|
598 |
(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jint in_dwMode) { |
|
599 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue)); |
|
600 |
if (!SetConsoleMode(h, in_dwMode)) { |
|
601 |
DWORD error = GetLastError(); |
|
602 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
603 |
lastErrorExceptionConstructor, |
|
604 |
(jlong) error); |
|
605 |
env->Throw((jthrowable) exc); |
|
606 |
return ; |
|
607 |
} |
|
608 |
} |
|
609 |
||
610 |
/* |
|
611 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
612 |
* Method: SetConsoleTextAttribute |
|
613 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;S)V |
|
614 |
*/ |
|
615 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_SetConsoleTextAttribute |
|
616 |
(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jshort in_wAttributes) { |
|
617 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue)); |
|
618 |
if (!SetConsoleTextAttribute(h, in_wAttributes)) { |
|
619 |
DWORD error = GetLastError(); |
|
620 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
621 |
lastErrorExceptionConstructor, |
|
622 |
(jlong) error); |
|
623 |
env->Throw((jthrowable) exc); |
|
624 |
return ; |
|
625 |
} |
|
626 |
} |
|
627 |
||
628 |
/* |
|
629 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
630 |
* Method: SetConsoleTitle |
|
631 |
* Signature: (Ljava/lang/String;)V |
|
632 |
*/ |
|
633 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_SetConsoleTitle |
|
634 |
(JNIEnv *env, jobject, jstring in_lpConsoleTitle) { |
|
635 |
const char *chars = env->GetStringUTFChars(in_lpConsoleTitle, NULL); |
|
636 |
if (!SetConsoleTitle(chars)) { |
|
637 |
env->ReleaseStringUTFChars(in_lpConsoleTitle, chars); |
|
638 |
DWORD error = GetLastError(); |
|
639 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
640 |
lastErrorExceptionConstructor, |
|
641 |
(jlong) error); |
|
642 |
env->Throw((jthrowable) exc); |
|
643 |
return ; |
|
644 |
} |
|
645 |
env->ReleaseStringUTFChars(in_lpConsoleTitle, chars); |
|
646 |
} |
|
647 |
||
648 |
/* |
|
649 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
650 |
* Method: WriteConsoleW |
|
651 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;[CILjdk/internal/org/jline/terminal/impl/jna/win/IntByReference;Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;)V |
|
652 |
*/ |
|
653 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_WriteConsoleW |
|
654 |
(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jcharArray in_lpBuffer, jint in_nNumberOfCharsToWrite, jobject out_lpNumberOfCharsWritten, jobject) { |
|
655 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue)); |
|
656 |
jchar *chars = new jchar[in_nNumberOfCharsToWrite]; |
|
657 |
env->GetCharArrayRegion(in_lpBuffer, 0, in_nNumberOfCharsToWrite, chars); |
|
658 |
DWORD written; |
|
659 |
if (!WriteConsoleW(h, chars, in_nNumberOfCharsToWrite, &written, NULL)) { |
|
660 |
delete chars; |
|
661 |
DWORD error = GetLastError(); |
|
662 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
663 |
lastErrorExceptionConstructor, |
|
664 |
(jlong) error); |
|
665 |
env->Throw((jthrowable) exc); |
|
666 |
return ; |
|
667 |
} |
|
668 |
||
669 |
env->SetIntField(out_lpNumberOfCharsWritten, intByReferenceValue, written); |
|
670 |
delete chars; |
|
671 |
} |
|
672 |
||
673 |
/* |
|
674 |
* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl |
|
675 |
* Method: ScrollConsoleScreenBuffer |
|
676 |
* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/SMALL_RECT;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/SMALL_RECT;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/COORD;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/CHAR_INFO;)V |
|
677 |
*/ |
|
678 |
JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_ScrollConsoleScreenBuffer |
|
679 |
(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jobject in_lpScrollRectangle, jobject in_lpClipRectangle, jobject in_dwDestinationOrigin, jobject in_lpFill) { |
|
680 |
HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue)); |
|
681 |
||
682 |
SMALL_RECT scrollRectangle; |
|
683 |
scrollRectangle.Left = (SHORT) env->GetLongField(in_lpScrollRectangle, SMALL_RECT_Left); |
|
684 |
scrollRectangle.Top = (SHORT) env->GetLongField(in_lpScrollRectangle, SMALL_RECT_Top); |
|
685 |
scrollRectangle.Right = (SHORT) env->GetLongField(in_lpScrollRectangle, SMALL_RECT_Right); |
|
686 |
scrollRectangle.Bottom = (SHORT) env->GetLongField(in_lpScrollRectangle, SMALL_RECT_Bottom); |
|
687 |
||
688 |
SMALL_RECT clipRectangle; |
|
689 |
clipRectangle.Left = (SHORT) env->GetLongField(in_lpClipRectangle, SMALL_RECT_Left); |
|
690 |
clipRectangle.Top = (SHORT) env->GetLongField(in_lpClipRectangle, SMALL_RECT_Top); |
|
691 |
clipRectangle.Right = (SHORT) env->GetLongField(in_lpClipRectangle, SMALL_RECT_Right); |
|
692 |
clipRectangle.Bottom = (SHORT) env->GetLongField(in_lpClipRectangle, SMALL_RECT_Bottom); |
|
693 |
||
694 |
COORD destinationOrigin; |
|
695 |
destinationOrigin.X = (SHORT) env->GetLongField(in_dwDestinationOrigin, COORD_X); |
|
696 |
destinationOrigin.Y = (SHORT) env->GetLongField(in_dwDestinationOrigin, COORD_Y); |
|
697 |
||
698 |
CHAR_INFO charInfo; |
|
699 |
charInfo.Char.UnicodeChar = env->GetCharField(env->GetObjectField(in_lpFill, CHAR_INFO_uChar), UnionChar_UnicodeChar); |
|
700 |
charInfo.Attributes = env->GetShortField(in_lpFill, CHAR_INFO_Attributes); |
|
701 |
||
702 |
if (!ScrollConsoleScreenBuffer(h, &scrollRectangle, &clipRectangle, destinationOrigin, &charInfo)) { |
|
703 |
DWORD error = GetLastError(); |
|
704 |
jobject exc = env->NewObject(lastErrorExceptionClass, |
|
705 |
lastErrorExceptionConstructor, |
|
706 |
(jlong) error); |
|
707 |
env->Throw((jthrowable) exc); |
|
708 |
return ; |
|
709 |
} |
|
710 |
} |