Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/jdk.internal.le/windows/native/lible/Kernel32.cpp
41149 views
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;
463
if (!ReadConsoleInputW(h, buffer, in_nLength, &numberOfEventsRead)) {
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
}
711
712